Messaging systems exist in a multitude of different domains and are formulated in a multitude of different ways. The messages often relate to other messages that have either gone before or are yet to come, in other words there is often a sequence to the messages. Due to the manner in which many messaging systems now work, it is not uncommon for messages to be received at a central processing environment out of sequence. This is particularly the case in multiprocessor environments where processes can occur at different speeds, which leads to de-sequencing. These messages are then often required to be transmitted onwards to a destination. Some destinations are unable to cope with messages which are received out of sequence as they then fail to process the messages properly.
There are many known messaging systems, which attempt to overcome some of the problems identified above. For example, WO 2007/062510 describes a system which uses a sequencer to process messages concurrently. The messages have a unique identifier and a sequence indicator. In this system, the conditions are such that it is possible to determine a priori a sequence identifier for the or each message. This facilitates the use of affinity: messages sharing the same sequence identifier are distributed by the same process. In WO2007/062510 the sequencing is managed by locking the messages in an outbound queue.
US 2007/0124398 discloses a multiprocessor environment where a system uses a combination of sequence identifier and sequence number to ensure that messages are processed by the same resource. This method requires threads of waiting messages that require acknowledgements before they can be processed. There is also a choice of queue depending on the sequence number and the queues can be ordered.
US 2003/110230 discloses a parallel processing environment where the ordering of messages is preserved by processing messages from the same source with a common resource or common thread. Again this requires the use of waiting threads and processes or an ordered queue of messages for onward transmission.
The above-mentioned prior art methods work to some extent, although they are very dependent on queuing messages which leads to complexity and the use of large amounts of memory and processing power. The main issue with this system is maintenance and the fact that is it not always possible to have the sequencing based on a unique sequence correlation. The dependencies can be much more complicated than just the order of a sequence number within the same sequence identifier. The above methods work but suffer with problems of maintenance and reliability. Having a waiting thread in a memory is not persistent: so if a problem occurs on the machine the sequencing will be lost. Having the sequencing managed in ordered queues raises a problem of scalability. It is more difficult to add more queues, or there has to be affinity between processes and queues. Affinity is also more complex to manage. It adds a point of failure because there is no redundancy in terms of service. In addition, the prior art does not teach a centralized history, so it is not possible to handle complex sequencing. In other words, when there is no unique sequence identifier.